package es.uned.etsii.si3.taller.servlets;

import java.math.BigDecimal;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;

import com.j256.ormlite.stmt.QueryBuilder;
import com.j256.ormlite.stmt.Where;
import com.opensymphony.xwork2.ActionSupport;

import es.uned.etsii.si3.taller.*;


public final class ParteTrabajoOperaciones extends ActionSupport implements SessionAware {

	private static final long serialVersionUID = 1L;
	private Map<String, Object> userSession;

/**
 * Datos del Parte de Trabajo	
 */
	private 	int 		id;
	@SuppressWarnings("unused")	
	private 	Usuario 	usuario;	
	private 	String 		nombreUsuario;	
	//private Taller 		taller;
	private 	Vehiculo 	vehiculo;
	private 	String 		descripcion;
	private 	BigDecimal 	precioPresupuesto;
	private 	boolean 	aceptado;
	private 	String		referencia;
	private 	Date 		fechaEntrada;
	private 	Date 		fechaEstimada;
	private 	Date 		fechaFin;
	private 	Date		fechaSalida;
	private 	boolean		avisado;
	private 	boolean 	vistoBueno;
	
	public 	int 		getID() 							{ return this.id; }
	public 	Usuario 	getUsuario() 						{ return (Usuario) userSession.get("usuario"); } 
	public 	String 		getNombreUsuario() 					{ return this.nombreUsuario; }	
	//Por ahora, saber el taller sólo es necesario con los empleados
	public  Taller      getTaller()                     	{ return this.getTallerSesionEmpleado(); }  
	public 	Vehiculo 	getVehiculo() 						{ return this.vehiculo; }
	public 	String 		getDescripcion() 					{ return this.descripcion; }
	public 	BigDecimal 	getPrecioPresupuesto() 				{ return this.precioPresupuesto; }
	public 	boolean 	getAceptado() 						{ return this.aceptado; }
	public 	String 		getReferencia() 					{ return this.referencia; }
	public 	Date 		getFechaEntrada() 					{ return this.fechaEntrada; }
	public 	Date 		getFechaEstimada() 					{ return this.fechaEstimada; }
	public 	Date 		getFechaFin()	 					{ return this.fechaFin; }
	public 	Date 		getFechaSalida() 					{ return this.fechaSalida; }
	public 	boolean 	getAvisado() 						{ return this.avisado; }
	public 	boolean 	getVistoBueno() 					{ return this.vistoBueno; }

	public 	void 		setID(int i)						{ this.id = i; }
	public 	void 		setUsuario(Usuario u) 				{ this.usuario = u; }
	public 	void 		setNombreUsuario(String s) 			{ this.nombreUsuario = s; }	
	//public void setTaller(Taller t) 				{ this.taller = t; }
	public 	void 		setVehiculo(Vehiculo v) 			{ this.vehiculo = v; }
	public 	void 		setDescripcion(String s)			{ this.descripcion = s; }
	public 	void 		setPrecioPresupuesto(BigDecimal d) 	{ this.precioPresupuesto = d; }
	public 	void 		setAceptado(boolean b) 				{ this.aceptado = b; }
	public 	void 		setReferencia(String s)				{ this.referencia = s; }
	public 	void 		setFechaEntrada(Date d) 			{ this.fechaEntrada = d; }
	public 	void 		setFechaEstimada(Date d) 			{ this.fechaEstimada = d; }
	public 	void 		setFechaFin(Date d) 				{ this.fechaFin = d; }
	public 	void 		setFechaSalida(Date d) 				{ this.fechaSalida = d; }
	public 	void 		setAvisado(boolean b)	 			{ this.avisado = b; }
	public 	void 		setVistoBueno(boolean b) 			{ this.vistoBueno = b; }
	
	private 	ParteTrabajo	parteSeleccionado = null;
	public 		ParteTrabajo	getParteSeleccionado() 					{ return this.parteSeleccionado; }
	public 		void			setParteSeleccionado(ParteTrabajo pT) 	{ this.parteSeleccionado = pT; }

	private 	static int 		parteSeleccionadoID = -1;
	public 		int				getParteSeleccionadoID() 				{ return ParteTrabajoOperaciones.parteSeleccionadoID; }
	public 		void			setParteSeleccionadoID(int i) 			{ ParteTrabajoOperaciones.parteSeleccionadoID = i; }

	private 	Cliente  		clienteSeleccionado;
	public 		Cliente 	 	getClienteSeleccionado() 				{ return this.clienteSeleccionado; }
	public 		void      		setClienteSeleccionado(Cliente c) 		{ this.clienteSeleccionado = c; }

	private 	static int		clienteSeleccionadoID = -1;
	public 		int  			getClienteSeleccionadoID() 				{ return ParteTrabajoOperaciones.clienteSeleccionadoID; }
	public 		void		 	setClienteSeleccionadoID(int i) 		{ ParteTrabajoOperaciones.clienteSeleccionadoID = i; }
	
	private 	Vehiculo  		vehiculoSeleccionado;
	public 		Vehiculo 	 	getVehiculoSeleccionado() 				{ return this.vehiculoSeleccionado; }
	public 		void      		setVehiculoSeleccionado(Vehiculo v)		{ this.vehiculoSeleccionado = v; }

	private 	static int		vehiculoSeleccionadoID = -1;
	public 		int 			getVehiculoSeleccionadoID() 			{ return ParteTrabajoOperaciones.vehiculoSeleccionadoID; }
	public 		void			setVehiculoSeleccionadoID(int i) 		{ ParteTrabajoOperaciones.vehiculoSeleccionadoID = i; }
	
	private 	Reparacion		reparacionSeleccionado = null;
	public 		Reparacion		getReparacionSeleccionado()				{ return this.reparacionSeleccionado; }
	public 		void			setReparacionSeleccionado(Reparacion r)	{ this.reparacionSeleccionado = r; }

	private 	static int 		reparacionSeleccionadoID = -1;
	public 		int				getReparacionSeleccionadoID() 			{ return ParteTrabajoOperaciones.reparacionSeleccionadoID; }
	public 		void			setReparacionSeleccionadoID(int i) 		{ ParteTrabajoOperaciones.reparacionSeleccionadoID = i; }

	private 	Trabajo			trabajoSeleccionado = null;
	public 		Trabajo			getTrabajoSeleccionado() 				{ return this.trabajoSeleccionado; }
	public 		void			setTrabajoSeleccionado(Trabajo t) 		{ this.trabajoSeleccionado = t; }
		
	private 	static int 		trabajoSeleccionadoID = -1;
	public 		int				getTrabajoSeleccionadoID() 				{ return ParteTrabajoOperaciones.trabajoSeleccionadoID; }
	public 		void			setTrabajoSeleccionadoID(int i) 		{ ParteTrabajoOperaciones.trabajoSeleccionadoID = i; }

	private 	Seccion			seccionSeleccionado = null;
	public 		Seccion			getSeccionSeleccionado()				{ return this.seccionSeleccionado; }
	public 		void			setSeccionSeleccionado(Seccion s)		{ this.seccionSeleccionado = s; }

	private 	static int 		seccionSeleccionadoID = -1;
	public 		int				getSeccionSeleccionadoID() 				{ return ParteTrabajoOperaciones.seccionSeleccionadoID; }
	public 		void			setSeccionSeleccionadoID(int i) 		{ ParteTrabajoOperaciones.seccionSeleccionadoID = i; }


	private 	List<ParteTrabajo> 		listado = null;
	public 		List<ParteTrabajo> 		getListado() 									{ return this.listado; }
	public 		void 					setListado(List<ParteTrabajo> l) 				{ this.listado = l; }

	private 	List<ParteTrabajo>		listaPartes;		
	public		List<ParteTrabajo>		getListaPartes() 								{ return this.listaPartes; }
	public 		void					setListaPartes(List<ParteTrabajo> l)			{ this.listaPartes = l; }

	private 	List<Vehiculo>			listaVehiculos = null;
	public 		List<Vehiculo> 			getListaVehiculos() 							{ return this.listaVehiculos; }
	public 		void 					setListaVehiculos(List<Vehiculo> l) 			{ this.listaVehiculos = l; }
	
	private 	List<Reparacion> 		listaReparaciones = null;
	public 		List<Reparacion>		getListaReparaciones()							{ return this.listaReparaciones; }
	public 		void 					setListaReparaciones(List<Reparacion> l)		{ this.listaReparaciones = l; }

	private 	List<Trabajo> 			listadoTrabajos = null;
	public 		List<Trabajo>	 		getListadoTrabajos()							{ return this.listadoTrabajos; }
	public 		void 					setListadoTrabajos(List<Trabajo> l)	 			{ this.listadoTrabajos = l; }

	private 	List<Trabajo>			listaTrabajos;
	public 		List<Trabajo>			getListaTrabajos()								{ return this.listaTrabajos; }
	public 		void					setListaTrabajos(List<Trabajo> l)				{ this.listaTrabajos = l; }

	private 	List<Seccion>			listaSecciones;
	public 		List<Seccion>			getListaSecciones()						{ return this.listaSecciones; }
	public 		void					setListaSecciones(List<Seccion> l)		{ this.listaSecciones = l; }

	private 	List<Material> 			listadoMaterialUsado = null;
	public 		List<Material>	 		getListadoMaterialUsado()						{ return this.listadoMaterialUsado; }
	public 		void 					setListadoMaterialUsado(List<Material> l) 		{ this.listadoMaterialUsado = l; }


/**
 * Cliente
 */
	private String 		usuarioLogin;
	private String 		dni;
	private String 		nombre;
	private String 		apellidos;
	private Provincia 	provincia;
	private String 		poblacion;
	private String 		direccion;
	private int 		codigoPostal;
	private String 		telefono;	

	public 	String    	getUsuarioLogin() 			{ return this.usuarioLogin; }
	public 	String    	getNombre()       			{ return this.nombre; }
	public 	String    	getApellidos()    			{ return this.apellidos; }
	public 	String    	getDni()          			{ return this.dni; }
	public 	Provincia 	getProvincia()    			{ return this.provincia; }
	public 	String    	getPoblacion()    			{ return this.poblacion; }
	public 	String    	getDireccion()    			{ return this.direccion; }
	public 	int       	getCodigoPostal() 			{ return this.codigoPostal; }
	public 	String    	getTelefono()     			{ return this.telefono; }	

	public 	void 		setUsuarioLogin(String s) 	{ this.usuarioLogin = s; }
	public 	void 		setNombre(String s) 		{ this.nombre = s; }
	public 	void 		setApellidos(String s) 		{ this.apellidos = s; }
	public 	void 		setDni(String s) 			{ this.dni = s; }
	public 	void 		setProvincia(Provincia p) 	{ this.provincia = p; }
	public 	void 		setPoblacion(String s) 		{ this.poblacion = s; }
	public 	void 		setDireccion(String s) 		{ this.direccion = s; }
	public 	void 		setCodigoPostal(int i) 		{ this.codigoPostal = i; }
	public 	void 		setTelefono(String s) 		{ this.telefono = s; }
		
	
/**
 * Vehiculos
 */
	private String 			matricula;
	private String			marca;
	private String 			modelo;

	public 	String  		getMatricula() 							{ return this.matricula; }
	public 	String  		getMarca()     							{ return this.marca; }
	public 	String  		getModelo()    							{ return this.modelo; }
	
	public 	void 			setMatricula(String s) 					{ this.matricula = s; }
	public 	void 			setMarca(String s) 						{ this.marca = s; }
	public 	void 			setModelo(String s) 					{ this.modelo = s; }
	

/**
 * Facturar
 */
	private BigDecimal 		precioFinal;
	public 	BigDecimal		getPrecioFinal() 						{ return this.precioFinal; }
	public 	void 			setPrecioFinal(BigDecimal bD)			{ this.precioFinal = bD; }
		
	
	private PTRecuperaciones PTR;
	

/** ********************************************************************************************************
	CONSTRUCTOR
 * @throws SQLException 
******************************************************************************************************** **/
	public ParteTrabajoOperaciones() throws SQLException {
		super();
		this.PTR = new PTRecuperaciones(); 
	}



	private Taller getTallerSesionEmpleado() {
		Taller res = null;
		Usuario uS = (Usuario) userSession.get("usuario");
		QueryBuilder<EmpleadoTaller, Integer> eTQb;
		try {
			eTQb = FactoriaDAO.getDao(EmpleadoTaller.class).queryBuilder();
			Where<EmpleadoTaller, Integer> wETQb = eTQb.where();			
			wETQb.eq(EmpleadoTaller.ID_USUARIO_FIELD_NAME, uS.getId());			
			List<EmpleadoTaller> lista = wETQb.query();
			res = lista.get(0).getTaller();
		} catch (SQLException e) {
			addActionError("Error al buscar taller: " + e);
		}			
		return res;
	}
	
	@Override
	public void setSession(Map<String, Object> session) {
		userSession = session;		
	}
    
}
